// 引入数据库
const db = require('../db')
// 引入bcryptjs
const bcrypt = require('bcryptjs')
// 引入jwt 
const jwt = require('jsonwebtoken')

exports.reguser = (req, res) => {
  // 获取用户名和密码
  const userInfo = req.body
  // 判断用户名和密码非空
  // if(!userInfo.username || !userInfo.password) {
  //   return res.cc('用户名和密码不能为空')
  // }
  // 判断用户名是否被占用
  const selectStr = 'select * from users where username=?'
  db.query(selectStr, userInfo.username, (err, results) => {
    if(err) {
      return res.cc(err)
    }
    if(results.length > 0) {
      return res.cc('该用户名已被占用，请更换其他用户名')
    }
    // 用户密码加密
    userInfo.password = bcrypt.hashSync(userInfo.password, 10)
    // 插入用户
    const insertStr = 'insert into users set ?'
    db.query(insertStr, {username: userInfo.username, password: userInfo.password}, (err, results) => {
      if(err) {
        return res.cc(err)
      }
      if(results.affectedRows !== 1) {
        return res.cc('注册失败，请稍后再试')
      }
      res.cc('注册成功', 0)
    })
  })
}

exports.login = (req, res) => {
  // 接收用户信息
  const userInfo = req.body
  // 查询db
  const selectStr = 'select * from users where username=?'
  db.query(selectStr, userInfo.username, (err, results) => {
    if(err) return res.cc(err)
    if(results.length !== 1) return res.cc('登录失败,该用户未注册！')
    // 判断密码是否一致
    const compareResult = bcrypt.compareSync(userInfo.password, results[0].password)
    if(!compareResult) return res.cc('登录失败，用户名或密码错误！')
    // 登录成功，生成token
    const user = {...results[0], password: '', user_pic: ''} //结构results，剔除密码和头像
      // 安装jwt npm i jsonwebtoken@8.5.1
    const { jwtSecretKey, expiresIn } = require('../config')
    const tokenStr = jwt.sign(user, jwtSecretKey, { expiresIn: expiresIn})
    res.send({
      status: 0,
      message: '登录成功！',
      token: 'Bearer ' + tokenStr
    })
  })
}